﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.Util.Translation;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.UserControls.Vaga
{
    public partial class Valores : UserControl
    {
        #region Propriedades
        public int IdVaga { private get; set; }
        public bool Editar { private get; set; }
        public List<Beneficio> BeneficiosSelecionados { get; set; }
        #endregion

        #region Eventos
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherTela();
        }

        protected void lsvBeneficio_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem)e.Item;
            var beneficio = (Beneficio)item.DataItem;

            ((Label)item.FindControl("lblBeneficio")).Text = beneficio.Descricao;

            if (!Editar) return;

            var selecionado = (CheckBox)item.FindControl("chkSelecionado");
            selecionado.Attributes.Add("Id", beneficio.Id.ToString());

            selecionado.Checked = (from beneficioLinq in BeneficiosSelecionados
                                   where beneficioLinq.Id.Equals(beneficio.Id)
                                   select true).FirstOrDefault();

            selecionado.Visible = true;
        }
        #endregion

        #region Métodos
        private void PreencherTela()
        {
            var vaga = new Domain.Vaga { Id = IdVaga }.Selecionar();

            PreencherBeneficios();
            PreencherFormaContratacao();

            if (Editar)
                PreencherDadosEdicao(vaga);
            else
                PreencherDadosFixos(vaga);

            pnlEdicao.Visible = Editar;
            pnlVisualizacao.Visible = !Editar;
        }

        private void PreencherDadosFixos(Domain.Vaga vaga)
        {
            PreencherDadosFixosValores(vaga);
            PreencherDadosFixosBeneficios(vaga.Id);
        }

        private void PreencherDadosFixosBeneficios(int idVaga)
        {
            var beneficios = new VagaBeneficio { IdVaga = idVaga }.SelecionarPorVaga();

            lsvBeneficio.DataSource = beneficios;
            lsvBeneficio.DataBind();
        }

        private void PreencherDadosFixosValores(Domain.Vaga vaga)
        {
            lblFormaContratacaoValor.Text = vaga.FormaContratacao.Descricao;

            if (vaga.Valor != null && vaga.Valor > 0)
                lblValorValor.Text = vaga.Valor.Value.ToString("0.00");
            else
            {
                lblValorValor.Text = vaga.ValorMinimo != null && vaga.ValorMinimo > 0
                                         ? vaga.ValorMinimo.Value.ToString("0.00")
                                         : Translator.TranslateMessage(Messages.Indefinido, Page.AppRelativeVirtualPath);

                lblValorValor.Text += " - ";
                
                lblValorValor.Text += vaga.ValorMaximo != null && vaga.ValorMaximo > 0
                                         ? vaga.ValorMaximo.Value.ToString("0.00")
                                         : Translator.TranslateMessage(Messages.Indefinido, Page.AppRelativeVirtualPath);
            }
        }

        private void PreencherDadosEdicao(Domain.Vaga vaga)
        {
            if (vaga.Valor != null) txtValor.Text = vaga.Valor.Value.ToString("0.00");
            if (vaga.ValorMaximo != null) txtValorAte.Text = vaga.ValorMaximo.Value.ToString("0.00");
            if (vaga.ValorMinimo != null) txtValorDe.Text = vaga.ValorMinimo.Value.ToString("0.00");
            ddlFormaContratacao.SelectedValue = vaga.IdFormaContratacao.ToString();

            PreencherDadosEdicaoBeneficio(vaga.Id);
        }

        private void PreencherDadosEdicaoBeneficio(int idVaga)
        {
            BeneficiosSelecionados = new VagaBeneficio { IdVaga = idVaga }.SelecionarPorVaga();

            lsvBeneficio.DataSource = new Beneficio().SelecionarAtivos();
            lsvBeneficio.DataBind();
        }

        private void PreencherBeneficios()
        {
            //lsvBeneficio.DataSource = Editar ? new Beneficio().SelecionarAtivos() : null;
            //lsvBeneficio.DataBind();
        }

        private void PreencherFormaContratacao()
        {
            if (!Editar) return;

            List<FormaContratacao> formaContratacoes = new FormaContratacao().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlFormaContratacao, formaContratacoes, false);
        }

        #endregion
    }
}